package com.deng.mail.authserver.mailauthserver.web;

import com.deng.mail.authserver.mailauthserver.exception.PhoneExistException;
import com.deng.mail.authserver.mailauthserver.exception.UserNameExistException;
import com.deng.mail.authserver.mailauthserver.service.IMemberService;
import com.deng.mail.authserver.mailauthserver.service.SmsService;
import com.deng.mail.authserver.mailauthserver.vo.UserRegisterVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.validation.Valid;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

import static com.deng.mail.authserver.mailauthserver.service.impl.SmsServiceImpl.REDIS_SMS_PREFIX;

@Controller
@Slf4j
public class ForwardRedirectDemoController {
    /*
    1. 从地址栏显示来说：forward是服务器内部重定向，客户端浏览器的网址不会发生变化；
                        redirect发生一个状态码，告诉服务器去重新请求那个网址，显示的的新的网址
    2. 数据共享：在定向过程中forward使用的是同一个request，可以共享；redirect不可以。(redirect可以使用RedirectAttributes)
    3. 应用场景：forward一般用于用户登录：redirect用于用户注销登录返回主页面或者跳转其他页面。forward刷新页面造成表单重复提交
    4. forward效率更高
    5. forward转发是服务器上的行为，而redirect是客户端行为
    6. 次数：forward只有一次请求，redirect两次请求（先http://localhost:8889/rr状态码302类型重定向，后http://localhost:8889/login.html状态码200）
     */
    @GetMapping("/ff")
    public Object forward() {
        log.info("test forward");
        return "forward:/login.html"; // 转发到login.html，url地址依然是/ff，刷新页面，重新执行该方法
    }

    @GetMapping("/rr")
    public Object redirect() {
        log.info("test redirect");
        return "redirect:/login.html"; // 重定向到login.html， url地址变为/login.html, 刷新页面，本方法不再执行，
    }
//
//    @GetMapping("/login.html")
//    public String d1() {
//        log.info("test direct");
//        return "login"; thymeleaf会自动前面拼项目地址localhost:8889/，后面拼.html
//    }
}
